package cn.xiaobai.domain;

import cn.hutool.core.lang.TypeReference;
import cn.hutool.json.JSONUtil;
import cn.xioabai.common.constant.JsonStrConstant;
import cn.xioabai.common.utility.SystemUtils;
import lombok.Data;
import org.apache.logging.log4j.util.Strings;
import org.springframework.util.CollectionUtils;

import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * 共享配置信息
 *
 * @Author yangdaji
 * @Date 2022/11/15 0015
 * @PackageName cn.xiaobai.domain
 * @ClassName ConfInfo
 */
@Data
public class ConfInfo extends ConfKey {


    /**
     * 间隔时间 默认: 5秒
     */
    public static Long interval = TimeUnit.SECONDS.toMillis(5);

    // =============== 推送数据文件相关变量
    /**
     * 监听指定后缀的文件, 默认 json文件
     */
    public static String suffixFile = JsonStrConstant.JSON_SUFFIX;

    /**
     * 监听文件目录, 没有设置则使用默认目录
     */
    public static String listenerFile = "C:/Users/Administrator/Desktop/test-file";

    // ================= 频道文件相关变量
    /**
     * 监听频道文件
     */
    public static String listenerChannelFile = "C:/Users/Administrator/Desktop/test-file";

    /**
     * 文件名称
     */
    public static String listenerChannelFileName = "channel-map.json";

    public static Map<String, String> initConfInfo(String jsonConfData) {
        Map<String, String> jsonToMap = JSONUtil.toBean(jsonConfData, new TypeReference<Map<String, String>>() {
        }, true);
        if (!CollectionUtils.isEmpty(jsonToMap)) {
            listenerFile = jsonToMap.getOrDefault(LISTENER_PATH, SystemUtils.getUserDir())
                    .replace("\\", "/");
            suffixFile = jsonToMap.getOrDefault(SUFFIX, JsonStrConstant.JSON_SUFFIX);
            // 获取监听频道文件
            listenerChannelFile = jsonToMap.get(LISTENER_CHANNEL_PATH);
            listenerChannelFileName = jsonToMap.get(CHANNEL_NAME);

            String intervalStr = jsonToMap.get(PERIOD);
            if (Strings.isNotBlank(intervalStr)) {
                interval = TimeUnit.SECONDS.toMillis(Long.parseLong(intervalStr));
            }
        }
        return jsonToMap;
    }
}
